// var LRUCache = function(capacity) {
//     this.cache = new Map()
//     this.capacity = capacity
// }

// LRUCache.prototype.get = function(key) {
//     if (this.cache.has(key)) {
//         // 存在即更新
//         let temp = this.cache.get(key)
//         this.cache.delete(key)
//         this.cache.set(key, temp)
//         return temp
//     }
//     return -1
// }

// LRUCache.prototype.put = function(key, value) {
//     if (this.cache.has(key)) {
//         // 存在即更新（删除后加入）
//         this.cache.delete(key)
//     } else if (this.cache.size >= this.capacity) {
//         // 不存在即加入
//         // 缓存超过最大值，则移除最近没有使用的
//         this.cache.delete(this.cache.keys().next().value)
//     }
//     this.cache.set(key, value)
// }

class LRUCache {

    #max = 0;
    #cache = new Map()

    constructor(max) {
        this.max = max
    }

    get = function (key) {
        if (this.#cache.has(key)) {
            // 存在即更新
            let temp = this.#cache.get(key)
            this.#cache.delete(key)
            this.#cache.set(key, temp)
            return temp
        }
        return -1
    }

    put = function (key, value) {
        if (this.#cache.has(key)) {
            // 存在即更新（删除后加入）
            this.cache.delete(key)
        } else if (this.#cache.size >= this.capacity) {
            // 不存在即加入
            // 缓存超过最大值，则移除最近没有使用的
            this.#cache.delete(this.cache.keys().next().value)
        }
        this.#cache.set(key, value)
    }

}

// const a = new LRUCache(10)

// console.log(a)

const cache = new LRUCache( 2 /* 缓存容量 */ );

cache.put(1, 1);
cache.put(2, 2);
cache.get(1);       // 返回  1
cache.put(3, 3);    // 该操作会使得密钥 2 作废
cache.get(2);       // 返回 -1 (未找到)
cache.put(4, 4);    // 该操作会使得密钥 1 作废
cache.get(1);       // 返回 -1 (未找到)
cache.get(3);       // 返回  3
cache.get(4);       // 返回  4